package br.com.obardavez.util;

import br.com.obardavez.util.enums.SideEnum;
import br.com.obardavez.util.impl.StringUtilImpl;

import com.google.inject.ImplementedBy;

@ImplementedBy(StringUtilImpl.class)
public interface StringUtil {

	public static final String DEFAULT_DELIMITER = ",";

	/**
	 * Verifica se o valor informado como primeiro parametro existe entre os
	 * valores informados no segundo parametro
	 * 
	 * @param value
	 *            Valor a ser verificado
	 * @param valueList
	 *            Lista de valores
	 * @return Boolea que indica se o valor esta contido no array de valores
	 *         informado
	 */
	Boolean contains(String value, String... valueList);

	/**
	 * Verifica se o valor informado esta vazio ou nulo
	 * 
	 * @param value
	 *            Valor a ser verificado
	 * @return Boolean que indica se o valor nao esta vazio
	 */
	Boolean isEmpty(String value);

	/**
	 * Verifica se o valor informado nao esta vazio nem nulo
	 * 
	 * @param value
	 *            Valor a ser verificado
	 * @return Boolean que indica se o valor nao esta vazio
	 */
	Boolean isNotEmpty(String value);

	/**
	 * Retorna o mesmo texto informado com a primeira letra em minusculo
	 * 
	 * @param value
	 *            Texto a ser alterado
	 * @return Texto com a primeira letra em minusculo
	 */
	String uncaptalize(String value);

	/**
	 * Retorna o mesmo texto informado com a primeira letra em maiusculo
	 * 
	 * @param value
	 *            Texto a ser alterado
	 * @return Texto com a primeira letra em maiusculo
	 */
	String captalize(String value);

	/**
	 * Preenche o texto com o caracter informado ate que o texto alcance o
	 * tamanho desejado.
	 * 
	 * @param text
	 *            Texto a ser alterado
	 * @param length
	 *            Tamanho final do texto
	 * @param fillCharacter
	 *            Caracter de preenchimento
	 * @return Texto preenchido com o caracter informado
	 */
	String fill(String text, Integer length, Character fillCharacter);

	/**
	 * Preenche o texto que representa o numero informado com o caracter
	 * informado ate que o texto alcance o tamanho desejado.
	 * 
	 * @param numero
	 *            Numero que sera utilizado para a contrucao do texto
	 * @param length
	 *            Tamanho final do texto
	 * @param fillCharacter
	 *            Caracter de preenchimento
	 * @return Texto que representa o numero preenchido com o caracter informado
	 */
	String fill(Number number, Integer length, Character fillCharacter);

	/**
	 * Preenche o texto que representa o numero informado com o caracter
	 * informado ate que o texto alcance o tamanho desejado.
	 * 
	 * @param numero
	 *            Numero que sera utilizado para a contrucao do texto
	 * @param length
	 *            Tamanho final do texto
	 * @param fillCharacter
	 *            Caracter de preenchimento
	 * @param fillSide
	 *            Lado do texto em que os caracteres serao inseridos
	 * @return Texto que representa o numero preenchido com o caracter informado
	 */
	String fill(Number number, Integer length, Character fillCharacter,
			SideEnum fillSide);

	/**
	 * Preenche o texto com o caracter informado ate que o texto alcance o
	 * tamanho desejado.
	 * 
	 * @param text
	 *            Texto a ser alterado
	 * @param length
	 *            Tamanho final do texto
	 * @param fillCharacter
	 *            Caracter de preenchimento
	 * @param fillSide
	 *            Lado do texto em que os caracteres serao inseridos
	 * @return Texto preenchido com o caracter informado
	 */
	String fill(String text, Integer length, Character fillCharacter,
			SideEnum fillSide);

	String includeSingleQuotes(String text);

	String includeSingleQuotes(String text, String delimiter);

	String insert(String originalText, int index, String textToInclude);

	Util getUtil();

	String escapeJavascript(String text);


	String capitalizeFully(String value);


	String escapeHtml(String text);

	String createIdForBox(String nameBox);


}